<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
	<script type="text/javascript" src="js/jquery.js"></script>
	<script type="text/javascript">
		$(document).ready(function(){
			$("#importe").keyup(function(){
				evaluaValor($(this))
			});
			
			$("#importe").change(function(){
				evaluaValor($(this))
			});
			
			$("#importe").keypress(function(){
				evaluaValor($(this))
			});
			
			/*$("#importe").bind({
			    keyup:function(){evaluaValor($(this));},
			    change:function(){evaluaValor($(this));},  
			    keypress:function(){evaluaValor($(this));}  
			});*/
		});
	
		//COPIAR ESTAS LINEAS DE CODIGO****************************************************************************************************************************
		//texto a sustituir cuando no cumple el standar
		var textoAnterior = "";
		var region = "2", separador = "", decimal = "";
		
		if(region == "1"){
			separador = ",";
			decimal = ".";
		}//else{
		
		if(region == "2"){
			separador = ".";
			decimal = ",";
		}
	
	    //Funcion que establece si el valor es valido o no
	    function cumpleStandar(valor){
		    //Se establece la expresion regular de importe
		    var expresion = new RegExp("^(|([0-9]{1,50}(\\"+ decimal +"([0-9]{1,2})?)?))$");
			
		    //se valida el valor recibido con la expresion regular de importe
		    if(expresion.test(valor))
		        return true;
				
		    return false;
		 }

	    //Funcion que obtine el valor y lo envia a validacion
	    function evaluaValor(campo){
			var valor, decimales, band = 0, fraccion, enteros;
		
		    //si comienza con una coma, se agrega un cero
		    if(campo.val().substring(0,1) == decimal){ 
		        campo.val("0" + campo.val());
			}else{
				if(campo.val().indexOf(decimal) < 0){
					separadorMiles(campo)
				}
				else{
					separadorMiles(campo)
				
					if(decimal == ","){
						//Registrar cuantas veces se encuentra el separador decimal en la cadena
						var contar = 0;
						var matches = campo.val().match(/\,/g);
						if (matches) 
							contar = matches.length;
						//-----------------------------------------------------------------------
						//Si se encuentra mas de una vez borrar de lo contrario separar----------
						if(contar <= 1){
							valor = campo.val().toString().split(",");
						}else{
							campo.val(campo.val().replace(/^\,|\,$/g,""));
							
							valor = campo.val().toString().split(",");
						}
						//------------------------------------------------------------------------
					}//else 
					
					if(decimal == "."){
						//Registrar cuantas veces se encuentra el separador decimal en la cadena
						var contar = 0;
						var matches = campo.val().match(/\./g);
						if (matches) {
							contar = matches.length;
						}
						
						//-----------------------------------------------------------------------
						//Si se encuentra mas de una vez borrar de lo contrario separar----------
						if(contar <= 1){
							valor = campo.val().toString().split(".");
						}else{
							campo.val(campo.val().replace(/^\.|\.$/g,""));
							
							valor = campo.val().toString().split(".");
						}
						//------------------------------------------------------------------------
					}
					
					//Una vez separado--------------------------------------------------------
					if(campo.val().indexOf(decimal) > 0){
						decimales = 0 + decimal + valor[1];
						
						if(!cumpleStandar(decimales)){
							decimales = textoAnterior;
							
							fraccion = decimales.toString().split(decimal)
							
							campo.val(valor[0] + decimal + fraccion[1]);
							
							separadorMiles(campo);
							
						}else{ //todo en orden
							textoAnterior = decimales;//La funcion original llega hasta aqui
						}
					}
					//-------------------------------------------------------------------------
				}
			}
		}
		
		function separadorMiles(componente){
			//alert(decimal)
		
			if(componente.val().indexOf(decimal) > 0){
				//alert("con decimal")
			
				var componentes = componente.val().toString().split(decimal);
				
				if(region == "1"){			
					//-----------------------------------------------------------------VALIDACION DE Y CONSTRUCCION DE MILES
					//Separacion y validacion para la primer parte del arreglo (MILES)	
					var num = componentes[0].replace(/\,/g,"");
				
					//alert("Este es el numero: " + num)
				
					if(!isNaN(num)){
						//Validacion y separacion 
						num = num.toString().split("").reverse().join("").replace(/(?=\d*\,?)(\d{3})/g,"$1,");//Colocando separeadores de miles		
						num = num.split("").reverse().join("").replace(/^[\,]/,"");//reemplazando puntos que se encuentren al final o principio de la linea		
						
						//Estableciendo valor que se colocara en el campo de texto
						componente.val(num + decimal + componentes[1]);
					}
					else{
						//En caso de introducir otro valor que no sea un numero se toma el valor y se eliminan los caracteres que no sean numeros o puntos
						nom = componentes[0].replace(/[^\d\,]*/g,"")						
						
						componente.val(nom + decimal + componentes[1]);
					}
					//-----------------------------------------------------------------------------------------------------
				}
				
				if(region == "2"){			
					//-----------------------------------------------------------------VALIDACION DE Y CONSTRUCCION DE MILES
					//Separacion y validacion para la primer parte del arreglo (MILES)	
					var num = componentes[0].replace(/\./g,"");
				
					if(!isNaN(num)){
						//Validacion y separacion 
						num = num.toString().split("").reverse().join("").replace(/(?=\d*\.?)(\d{3})/g,"$1.");//Colocando separeadores de miles		
						num = num.split("").reverse().join("").replace(/^[\.]/,"");//reemplazando puntos que se encuentren al final o principio de la linea		
						
						//Estableciendo valor que se colocara en el campo de texto
						componente.val(num + decimal + componentes[1]);
					} 
					else{
						//En caso de introducir otro valor que no sea un numero se toma el valor y se eliminan los caracteres que no sean numeros o puntos
						nom = componentes[0].replace(/[^\d\.]*/g,"")		
						
						componente.val(nom + decimal + componentes[1]);
					}
					//-----------------------------------------------------------------------------------------------------
				}			
			}			
				
			else{
				//alert("sin decimal")
			
				if(region == "1"){			
					//-----------------------------------------------------------------VALIDACION DE Y CONSTRUCCION DE MILES
					//Separacion y validacion para la primer parte del arreglo (MILES)	
					var num = componente.val().replace(/\,/g,"");
				
					//alert("Este es el numero: " + num)
				
					if(!isNaN(num)){
						//Validacion y separacion 
						num = num.toString().split("").reverse().join("").replace(/(?=\d*\,?)(\d{3})/g,"$1,");//Colocando separeadores de miles		
						num = num.split("").reverse().join("").replace(/^[\,]/,"");//reemplazando puntos que se encuentren al final o principio de la linea		
						
						//Estableciendo valor que se colocara en el campo de texto
						componente.val(num);
					}
					else{
						//En caso de introducir otro valor que no sea un numero se toma el valor y se eliminan los caracteres que no sean numeros o puntos
						componente.val(componente.val().replace(/[^\d\,]*/g,""));
					}
					//-----------------------------------------------------------------------------------------------------
				}
				
				if(region == "2"){			
					//-----------------------------------------------------------------VALIDACION DE Y CONSTRUCCION DE MILES
					//Separacion y validacion para la primer parte del arreglo (MILES)	
					var num = componente.val().replace(/\./g,"");
				
					if(!isNaN(num)){
						//Validacion y separacion 
						num = num.toString().split("").reverse().join("").replace(/(?=\d*\.?)(\d{3})/g,"$1.");//Colocando separeadores de miles		
						num = num.split("").reverse().join("").replace(/^[\.]/,"");//reemplazando puntos que se encuentren al final o principio de la linea
						
						//Estableciendo valor que se colocara en el campo de texto
						componente.val(num);
					}
					else{
						//En caso de introducir otro valor que no sea un numero se toma el valor y se eliminan los caracteres que no sean numeros o puntos
						componente.val(componente.val().replace(/[^\d\.]*/g,""));
					}
					//-----------------------------------------------------------------------------------------------------
				}			
			}//fin else
		}
		//TERMINA COPIAR LINEAS DE CODIGO*******************************************************************************************************************************
	</script>
</head>
<body>
	<form action="#">
		<input type="text" id="importe" style="text-align:right"><br><br>
	</form>
</body>
</html> 